<html>
<head>
<title>pho: an image viewer</title>
</head>

<body bgcolor=white>

<img align=right src="pho.jpg" width=213 height=340 alt="">

<h1>pho: View and annotate multiple images</h1>

<i><a href="../../mailme.html">...Akkana</a></i>

<p>
<b>pho</b> (pronounced like the first syllable in "photo")
is a lightweight program for viewing large numbers of
images quickly, rotating or deleting some,
and making notes about what to do with each image --
for instance, for going through hundreds of
images after uploading them from a digital camera.

<p><b>Pho 0.9.7 is released!</b>

<p>To get it, <a href="#download">skip to the download section.</a>

<p>
The big change here is Keywords mode. It uses the same note flags
that Pho has always had, but Keywords mode gives you an easy way to
annotate a directory of images with strings. You can type in phrases
for each note, and you can have up to 31 notes now, not just 10.
If you use Pho to categorize your photos, you'll find Keywords mode
very handy.

<p>
There's also a new slideshow mode, where you specify the interval in seconds
(e.g. pho -p -s5 for a 5-second delay between images).
You can use this for a screensaver, or just to go through slides
automatically. Hitting the spacebar cancels slideshow mode.

<p>
You can now customize the command called up with the 'g' key.
It defaults to gimp (not gimp-remote as in previous pho versions),
but you can call any program you like,
e.g. view the current image in firefox with
<code>export PHO_CMD="firefox %s"</code> --
don't forget the %s for the filename!

<p>
BSD users: pho should build on *BSD now as of 0.9.6-pre2.
If it doesn't, please let me know.

<p>
Other changes include major work on scaling modes. Double and half size
mode now behave differently depending on whether you're in normal or
full size mode, and the scaling factor (e.g. half size) is remembered
as you go from image to image.

<p>
<b>Warning: I've swapped the meanings of f and F. I found that I
use full size mode all the time, whereas I seldom use full screen,
and when I do, I use it once at the beginning of a session (e.g.
to view a bunch of cartoons scaled up). So it makes more sense
to have full size on f (easier to type).</b>

<p>
I've also done quite a bit of performance work, to reduce the number
of redraws, speed up rotates, and reduce the number of times Pho has to
re-read the file on disk.

<p>
<a href="#download">Skip to the download section</a>.


<h2>Why another image viewer?  Surely there are plenty of those?</h2>

<p>
I used to use xv for paging through images -- it's quite a good
viewing program -- but it had a few features which annoyed me.  For
example, it creates a directory called .xvpics in every directory it touches;
and if an image has to be resized to fit the screen, and after that
you save it (perhaps after rotating it), it saves at the smaller size
and boom, there goes your high-res image.

<p>
But, more important, there were a few extra things I needed.
During image triage, I need to be able to do a few things quickly:
<ul>
<li>Rotate images by multiples of 90 degrees, and remember the rotations.
<li>Delete bad images.
<li>Copy a few of the best horizontals to my Backgrounds (wallpaper) directory.
<li>Note which images I might want to put on a web page (after resizing).
</ul>
With xv, I found that I was writing these lists on paper, or trying
to keep track of them in my head.  That's dumb!  Why not make the
computer do that work?  So I did.

<p>
Since I wrote pho several years ago, I keep hearing about other
image viewers, and thinking maybe pho was redundant.  But I recently
did a search, and couldn't come up with any other image viewers that
are similarly efficient for paging through large collections of
images.  So I guess I'll keep maintaining pho!

<p>
Pho can read any format supported by gdk-pixbuf.  I haven't found a
list of those formats anywhere, but it seems to be substantial.
The only format I've hit so far that it doesn't read is photocd.
You can convert those to other formats using the ImageMagick utility.

<p>
Pho can delete images on disk, but it can't save rotated
images yet.
I use my <a href="../imagebatch/">imagebatch</a> scripts for that,
or you can use a commandline utility like <a
href="http://imagemagick.org">ImageMagick</a>
(which is what my imagebatch scripts use under the hood).

<h2>How to use pho</h2>

Usage: pho *.jpg (or whatever).<br>
It will show the first image, scaled for your screen if needed.
Then the following keys work:
<dl>
<dt>space                   <dd>Go to next image.
<dt>backspace, -            <dd>Go to previous image.
<dt>r, t, right-arrow       <dd>Rotate right (clockwise). 
<dt>R, T, l, L, left-arrow  <dd>Rotate left (counter-clockwise).
<dt>up-arrow                <dd>Rotate 180 degrees.
<dt>home                    <dd>Go back to the first image.
<dt>d                 <dd>Bring up a delete dialog (another d deletes the file)
<dt>i                       <dd>Show information about the image
                                (includes EXIF info and JPEG comment, if any).
<dt>0-9                     <dd>Add this image to the appropriate list.
<dt>f                       <dd>Toggle in and out of "full size mode"
      (show the image at its native size, even if that's too big
       to fit on screen)
<dt>F                       <dd>Toggle in and out of "full screen mode"
      (make the image as big as it can be and still fit on the screen).
<dt>p                       <dd>Toggle in and out of Presentation Mode
      (full screen, no mouse or window borders)
<dt>-, /                    <dd>Zoom out, to half size
<dt>+, =, *                 <dd>Zoom in, to double size
<td>o                       <dd>Pop up a file selector to change the working
                                file list (New replaces all the old images,
                                Add just adds new files to the list)
<dt>g                       <dd>Run gimp on this image
    (or set PHO_REMOTE to an alternate command).
<dt>q                       <dd>Quit.
</dl>

pho will remember the correct (last shown) rotation for each image.
When it exits (either because the last image was viewed or because
the user typed q), it will print out the images that need to be
rotated and deleted (it does not actually change the files on disk),
and the images which were added to numbered lists.
For example, I might press 1 on all the photos I want to save for
a web page, 2 on the couple of photos that need additional editing
in gimp, and 3 on the photos I want to save as desktop backgrounds.

<a name="download">
<h2>Download: Getting pho</h2>
<p>
<p>
Try the new pho 0.9.6 release!
Source tarball only: <a href="pho-0.9.6.tar.gz">pho-0.9.6.tar.gz</a>.
<p>
<b>Ubuntu (Hardy) package: <a
href="pho_0.9.6_i386-hardy.deb">pho_0.9.6_i386-hardy.deb</a></b>
<br />
<b>Debian (Etch) package: <a
href="pho_0.9.6_i386-etch.deb">pho_0.9.6_i386-etch.deb</a></b>
<br />

<p>
<b>Windows binary (requires gtk+): <a
href="pho-0.9.5-pre5.zip">pho-0.9.5-pre5.zip</a>.</b>
(Thanks to Michael Schumacher!)
The Windows binary is currently still on 0.9.5 -- I'll put up
binaries for 0.9.6 when I can get some.

<p>
<b>Mac users:</b>
Pho does work on Mac OS X
if you have the appropriate gtk/gdk headers and libraries.
I've only seen it used as an X11 application, but in theory
it should be able to run with the new experimental native gtk
libraries too. If you've tried it, let me know how it works!

<p>
<b>Dependencies:</b>
pho uses the gtk+-2.0 libraries (though if it can't find them, 
it can run slightly less functionally with gtk1 and gdk-pixbuf).
You may need to edit the Makefile if your system has these libraries
installed in different place from my system (sorry, no autoconf yet).
<p>
To compile pho, you'll need a compiler, GTK, and all the libraries
it depends on. For example, on Ubuntu Feisty, this command should get you
what you need:
<pre>
aptitude install build-essential libgtk2.0-dev
</pre>

<p>
If you like pho, or if you think it's promising but there's some
feature it really needs ... <a href="../../mailme.html">let me know!</a>

<h2>Changelog</h2>
<dl>
<dt>12/15/2009, <a href="pho-0.9.7-pre3.tar.gz">Pho 0.9.7-pre3</a>:
<dd>More cleanup of rotation/scaling, and transitions from one mode
    to the next.
<dt>9/26/2009, <a href="pho-0.9.7-pre2.tar.gz">Pho 0.9.7-pre2</a>:
<dd>
  Add ability to add new image files or change the list without restarting.
  Total cleanup/rewrite of rotate/scale logic.
  Remove old gtk1 code.
<dt>??/??/2009, <a href="pho-0.9.7-pre1.tar.gz">Pho 0.9.7-pre1</a>:
<dd>Clean up rotation code;
    List images with incorrect exif rotation;
    smarter PHO_REMOTE (can do other things, not just GIMP);
    don't go fullscreen from Ctrl-F in the keywords dialog.
    fix a minor Mac build issue.
<dt>11/9/2008, <a href="pho-0.9.6.tar.gz">Pho 0.9.6</a>:
<dd>RELEASE! The only difference from 0.9.6-pre3 is to change
    the default PHO_REMOTE command from gimp-remote to gimp,
    since gimp-remote is obsolete and no longer provided in Linux
    distros (and never was, on Mac or Win).
<dt>10/2/2008, <a href="pho-0.9.6-pre3.tar.gz">Pho 0.9.6-pre3</a>:
<dd>Change the list next/prev code to fix (I hope) a bug where pho
    would get confused and cycle from the last image back to the first.
<dt>8/13/2008, <a href="pho-0.9.6-pre2.tar.gz">Pho 0.9.6-pre2</a>:
<dd>Simplify exif/Makefile so it'll work on FreeBSD and other
    systems where make is non-GNU make.
<dt>8/11/2008, <a href="pho-0.9.6-pre1.tar.gz">Pho 0.9.6-pre1</a>:
<dd>Add Keyword mode. Add slideshow mode. Swap -f and -F.
    Add PHO_REMOTE environment variable.
    Lots of performance and stability work.
<dt>8/6/2007, <a href="pho-0.9.5.1.tar.gz">Pho 0.9.5.1</a>:
<dd>Fix a buffer overflow bug on the 'g' key,
    which runs gimp-remote on the current file.
<dt>3/20/2007, <a href="pho-0.9.5.tar.gz">Pho 0.9.5</a>:
<dd>No changes except some manual and html page updates.
<dt>3/5/2007, <a href="pho-0.9.5-pre5.tar.gz">Pho 0.9.5-pre5</a>:
<dd>Check for a PHO_ARGS environment variable.
    Add a -P argument to force non-presentation mode.
    Fix a few bugs with double/half size and with scaling.<br>
    Make note 0 work properly.
<dt>7/24/2005, <a href="pho-0.9.5-pre4.tar.gz">Pho 0.9.5-pre4</a>:
<dd>Double and half size weren't working properly;
    <br>couldn't use arrow and spacebar to get out of the final Quit
    confirmation dialog (though ESC always worked).
<dt>10/9/2004, <a href="pho-0.9.5-pre3.tar.gz">Pho 0.9.5-pre3</a>:
<dd>Fixed a crash bug when revisiting an image which was previously rotated.
    <br>Added a workaround for Metacity's evil window size handling.
    <br>Made the background black when in presentation mode.
<dt>9/30/2004, <a href="pho-0.9.5-pre2.tar.gz">Pho 0.9.5-pre2</a>:
<dd>Fixed some bugs involving ending up at the wrong image when
    deleting or pressing HOME.  Cleaned up handing of image list.<br>
    Fixed an aspect ratio problem.
<dt>7/13/2004, <a href="pho-0.9.5-pre1.tar.gz">Pho 0.9.5-pre1</a>:
<dd>Rewrote the image list handling to use a linked list.
    Lots of associated code cleanup.<br>
    Port to gtk2, and build under either gtk1 or gtk2.<br>
    Add new "fullscreen mode" (e.g. for presentations, or for difficult
    window managers).<br>
    Various futile attempts to hang on to window focus in various window
    managers.
<dt>9/30/2003, <a href="pho-0.9.2.tar.gz">Pho 0.9.2</a>:
<dd>Don't try to move the window unless the image size has changed
    (fix the annoying bug where pho wouldn't let you move windows).
    <br>
    Also fix a crash after dismissing the info dialog by clicking
    on the windowmanager "X".
<dt>2/26/2003, <a href="pho-0.9.1.tar.gz">Pho 0.9.1</a>:
<dd>Rusty Russell: fix an off-by-one error in rotation code,
  reducing the need for extra memory;
  <br>
  Brian Langenberger: bracket printed filenames with quotes if
  they contain spaces or quote characters.
<dt>1/8/2003, <a href="pho-0.9.tar.gz">Pho 0.9</a>:
<dd>Fix pho.spec version, and a make clean bug.
<dt>12/3/2002, <a href="pho-0.9pre2.tar.gz">Pho 0.9pre2</a>:
<dd>Fix a crash in the quit dialog.
<dt>11/27/2002, <a href="pho-0.9pre1.tar.gz">Pho 0.9pre1</a>:
<dd>Add EXIF handling, using code from
 <a href="http://www.sentex.net/~mwandel/jhead/">jhead, by Matthias Wandel</a>.
<dt>10/18/2002, <a href="pho-0.8.tar.gz">Pho 0.8</a>:
<dd>Build RPM and deb; show image size in titlebar; add home key.
<dt>8/13/2002, <a href="pho-0.7.tgz">Pho 0.7</a>:
<dd>Put image name in titlebar; prompt after last image before quitting;
    add fullscreen mode.
<dt>7/28/2002, <a href="pho-0.6.1.tgz">Pho 0.6.1</a>:
<dd>Fixed a bug with printing a note set on the last image.
<dt>7/21/2002, <a href="pho-0.6.tgz">Pho 0.6</a>:
<dd>Code cleanup, change the handling of the notes structures.
<dt>7/21/2002, <a href="pho-0.5.1.tgz">Pho 0.5.1</a>:
<dd>Fix a bug where image rotations were wrong when going backward.
<dt>7/11/2002, <a href="pho-0.5.tgz">Pho 0.5</a>:
<dd>Add delete dialog, and really delete files on disk.
<dt>7/3/2002, <a href="pho-0.4.tgz">Pho 0.4</a>:
<dd>Fixed a bug with gif rotation.
<dt>7/1/2002, Pho 0.3:
<dd>Rename yass to pho, add info dialog.
<dt>6/28/2002, Yass 0.2
<dd>Some added features; add manual and make install target.
<dt>6/24/2002, Yass 0.1:
<dd>First release.
</dl>

<hr>
<a href="../">Akkana's Software</a><br>
<a href="../../">Shallowsky Home</a>
</body>
</html>
